Micron Document
Aleph Git


Displaying Raw • Download

docs/example_plugins/view.py HEAD (8b8a5035) Text, 11.12 KB

T8b949e# This plugin lets you remotely query and view a
T8b949e# number of different image sources in Sideband,
T8b949e# including remote or local webcams, video sources
T8b949e# or images stored in a filesystem.
T8b949e#
T8b949e# This plugin requires the "pillow" pip package.
T8b949e#
T8b949e# For HTTP and local file sources, no extras are
T8b949e# required, but for fetching images from connected
T8b949e# video sources, you need "opencv-python" from pip.

Tff7b72import T7ee787io
Tff7b72import T7ee787os
Tff7b72import T7ee787RNS
Tff7b72import T7ee787time
Tff7b72import T7ee787queue
Tff7b72import T7ee787requests
Tff7b72import T7ee787threading
Tff7b72import T7ee787importlib
Tff7b72from T7ee787PIL Tff7b72import Te6edf3Image Tff7b72as Te6edf3PilImage

Tff7b72if Te6edf3importlibTff7b72.Td2a8ffutilTff7b72.Td2a8fffind_specTb4b4b4(Ta5d6ff"Ta5d6ffcv2Ta5d6ff"Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72import T7ee787cv2

T8b949e# Add view sources to the plugin
Tff7b72def Td2a8ffregister_view_sourcesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3ViewCommandPluginTff7b72.Td2a8ffadd_sourceTb4b4b4(Ta5d6ff"Ta5d6ffxkcdTa5d6ff"Tb4b4b4, Te6edf3HttpSourceTb4b4b4(Ta5d6ff"Ta5d6ffhttps://imgs.xkcd.com/comics/tsp_vs_tbsp.pngTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3ViewCommandPluginTff7b72.Td2a8ffadd_sourceTb4b4b4(Ta5d6ff"Ta5d6ffcameraTa5d6ff"Tb4b4b4, Te6edf3CameraSourceTb4b4b4(Te6edf3camera_indexTff7b72=T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3ViewCommandPluginTff7b72.Td2a8ffadd_sourceTb4b4b4(Ta5d6ff"Ta5d6ffrocksTa5d6ff"Tb4b4b4, Te6edf3FileSourceTb4b4b4(Ta5d6ff"Ta5d6ff~/Downloads/rocks.jpgTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3ViewCommandPluginTff7b72.Td2a8ffadd_sourceTb4b4b4(Ta5d6ff"Ta5d6ffosakaTa5d6ff"Tb4b4b4, Te6edf3StreamSourceTb4b4b4(Ta5d6ff"Ta5d6ffhttp://honjin1.miemasu.net/nphMotionJpeg?Resolution=640x480&Quality=StandardTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3ViewCommandPluginTff7b72.Td2a8ffadd_sourceTb4b4b4(Ta5d6ff"Ta5d6fffactoryTa5d6ff"Tb4b4b4, Te6edf3StreamSourceTb4b4b4(Ta5d6ff"Ta5d6ffhttp://takemotopiano.aa1.netvolante.jp:8190/nphMotionJpeg?Resolution=640x480&Quality=Standard&Framerate=1Ta5d6ff"Tb4b4b4)Tb4b4b4)

Te6edf3quality_presets Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffloraTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff160Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff18Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6fflowTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff256Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff25Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff320Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff33Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffmediumTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff480Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff50Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffhighTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff960Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff65Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffhdTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff1920Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff75Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ff4kTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4: T79c0ff3840Tb4b4b4, Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff65Tb4b4b4}Tb4b4b4,
Tb4b4b4}

Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdefaultTa5d6ff" Tff7b72in Te6edf3quality_presetsTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffNo default quality preset defined, please define one and reload the pluginTa5d6ff"Tb4b4b4)

Tff7b72class T56d364ViewSourceTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3DEFAULT_STALE_TIME Tff7b72= T79c0ff3.14159

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflast_update Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffstale_time Tff7b72= Te6edf3ViewSourceTff7b72.Td2a8ffDEFAULT_STALE_TIME

Tff7b72def Td2a8ffis_staleTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_update Tff7b72+ Tff7b72selfTff7b72.Td2a8ffstale_time

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedErrorTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffscaled_imageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3max_dimensionTb4b4b4, Te6edf3qualityTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3PilImageTff7b72.Td2a8ffopenTb4b4b4(Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsource_dataTb4b4b4)Tb4b4b4) Tff7b72as Te6edf3imTb4b4b4:
Te6edf3imTff7b72.Td2a8ffthumbnailTb4b4b4(Tb4b4b4(Te6edf3max_dimensionTb4b4b4, Te6edf3max_dimensionTb4b4b4)Tb4b4b4)
Te6edf3buf Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tb4b4b4)
Te6edf3imTff7b72.Td2a8ffsaveTb4b4b4(Te6edf3bufTb4b4b4, Tffa657formatTff7b72=Ta5d6ff"Ta5d6ffwebpTa5d6ff"Tb4b4b4, Te6edf3qualityTff7b72=Te6edf3qualityTb4b4b4)
Tff7b72return Te6edf3bufTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffget_image_fieldTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3presetTff7b72=Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3preset Tff7b72in Te6edf3quality_presetsTb4b4b4:
Te6edf3preset Tff7b72= Ta5d6ff"Ta5d6ffdefaultTa5d6ff"

Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_staleTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3max_dimension Tff7b72= Te6edf3quality_presetsTb4b4b4[Te6edf3presetTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmaxTa5d6ff"Tb4b4b4]
Te6edf3quality Tff7b72= Te6edf3quality_presetsTb4b4b4[Te6edf3presetTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4]
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ffwebpTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffscaled_imageTb4b4b4(Te6edf3max_dimensionTb4b4b4, Te6edf3qualityTb4b4b4)Tb4b4b4]

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not create image field for Tffd700{Tff7b72selfTffd700}Ta5d6ff. The contained exception was: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)

Tff7b72return Tff7b72None

Tff7b72class T56d364HttpSourceTb4b4b4(Te6edf3ViewSourceTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffurl Tff7b72= Te6edf3url
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3image_request Tff7b72= Te6edf3requestsTff7b72.Td2a8ffgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffurlTb4b4b4, Te6edf3streamTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3image_requestTff7b72.Td2a8ffstatus_code Tff7b72== T79c0ff200Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Te6edf3image_requestTff7b72.Td2a8ffcontent
Tff7b72selfTff7b72.Td2a8fflast_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Tff7b72None

Tff7b72class T56d364CameraSourceTb4b4b4(Te6edf3ViewSourceTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3camera_indexTff7b72=T79c0ff0Tb4b4b4, Te6edf3camera_widthTff7b72=T79c0ff1280Tb4b4b4, Te6edf3camera_heightTff7b72=T79c0ff720Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcamera_index Tff7b72= Te6edf3camera_index
Tff7b72selfTff7b72.Td2a8ffcamera_width Tff7b72= Te6edf3camera_width
Tff7b72selfTff7b72.Td2a8ffcamera_height Tff7b72= Te6edf3camera_height
Tff7b72selfTff7b72.Td2a8ffcamera_ready Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffframe_queue Tff7b72= Te6edf3queueTff7b72.Td2a8ffQueueTb4b4b4(Tb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffstart_readingTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstart_readingTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcamera Tff7b72= Te6edf3cv2Tff7b72.Td2a8ffVideoCaptureTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcamera_indexTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcameraTff7b72.Td2a8ffsetTb4b4b4(Te6edf3cv2Tff7b72.Td2a8ffCAP_PROP_FRAME_WIDTHTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcamera_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcameraTff7b72.Td2a8ffsetTb4b4b4(Te6edf3cv2Tff7b72.Td2a8ffCAP_PROP_FRAME_HEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcamera_heightTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ffread_framesTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffread_framesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3retTb4b4b4, Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffcameraTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcamera_ready Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3retTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcamera_ready Tff7b72= Tff7b72False
Tff7b72break
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffemptyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffget_nowaitTb4b4b4(Tb4b4b4)
Tff7b72except Te6edf3queueTff7b72.Td2a8ffEmptyTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffputTb4b4b4(Te6edf3frameTb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while reading frames from the camera: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffrelease_cameraTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffcameraTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstart_readingTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72not Tff7b72selfTff7b72.Td2a8ffcamera_readyTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.2Tb4b4b4)
Te6edf3retvalTb4b4b4, Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffcameraTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3retvalTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3retvalTb4b4b4, Te6edf3buffer Tff7b72= Te6edf3cv2Tff7b72.Td2a8ffimencodeTb4b4b4(Ta5d6ff"Ta5d6ff.pngTa5d6ff"Tb4b4b4, Te6edf3frameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Te6edf3bufferTb4b4b4)Tff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffrelease_cameraTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcameraTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffcamera Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcamera_ready Tff7b72= Tff7b72False

Tff7b72class T56d364StreamSourceTb4b4b4(Te6edf3ViewSourceTb4b4b4)Tb4b4b4:
Te6edf3DEFAULT_IDLE_TIMEOUT Tff7b72= T79c0ff10

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffurl Tff7b72= Te6edf3url
Tff7b72selfTff7b72.Td2a8ffstream_ready Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffframe_queue Tff7b72= Te6edf3queueTff7b72.Td2a8ffQueueTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstream Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffidle_timeout Tff7b72= Te6edf3StreamSourceTff7b72.Td2a8ffDEFAULT_IDLE_TIMEOUT
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffstart_readingTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstart_readingTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstream Tff7b72= Te6edf3cv2Tff7b72.Td2a8ffVideoCaptureTb4b4b4(Tff7b72selfTff7b72.Td2a8ffurlTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstarted Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ffread_framesTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffread_framesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72while Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8fflast_updateTb4b4b4, Tff7b72selfTff7b72.Td2a8ffstartedTb4b4b4)Tff7b72+Tff7b72selfTff7b72.Td2a8ffidle_timeout Tff7b72> Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3retTb4b4b4, Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffstreamTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3retTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstream_ready Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstream_ready Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffemptyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffqsizeTb4b4b4(Tb4b4b4) Tff7b72> T79c0ff1Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffget_nowaitTb4b4b4(Tb4b4b4)
Tff7b72except Te6edf3queueTff7b72.Td2a8ffEmptyTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffputTb4b4b4(Te6edf3frameTb4b4b4)

Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Tffa657strTb4b4b4(Tff7b72selfTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff idledTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while reading frames from the stream: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffrelease_streamTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffstreamTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstart_readingTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72not Tff7b72selfTff7b72.Td2a8ffstream_readyTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.2Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstream Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Tff7b72None
Tff7b72return

Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffframe_queueTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4)
Te6edf3retvalTb4b4b4, Te6edf3buffer Tff7b72= Te6edf3cv2Tff7b72.Td2a8ffimencodeTb4b4b4(Ta5d6ff"Ta5d6ff.pngTa5d6ff"Tb4b4b4, Te6edf3frameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Te6edf3bufferTb4b4b4)Tff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffrelease_streamTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstreamTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffstream Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstream_ready Tff7b72= Tff7b72False

Tff7b72class T56d364FileSourceTb4b4b4(Te6edf3ViewSourceTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexpanduserTb4b4b4(Te6edf3pathTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3image_fileTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Te6edf3image_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not read image at Tffea00\"Tffd700{self.path}Tffea00\"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsource_data Tff7b72= Tff7b72None

Tff7b72class T56d364ViewCommandPluginTb4b4b4(Te6edf3SidebandCommandPluginTb4b4b4)Tb4b4b4:
Te6edf3command_name Tff7b72= Ta5d6ff"Ta5d6ffviewTa5d6ff"
Te6edf3sources Tff7b72= Tb4b4b4{Tb4b4b4}

Te6edf3stamptimefmt Tff7b72= Ta5d6ff"Ta5d6ff%Ta5d6ffY-Ta5d6ff%Ta5d6ffm-Tffd700%dTa5d6ff Ta5d6ff%Ta5d6ffH:Ta5d6ff%Ta5d6ffM:Ta5d6ff%Ta5d6ffSTa5d6ff"

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffView command plugin starting...Ta5d6ff"Tb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8ffadd_sourceTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3sourceTb4b4b4)Tb4b4b4:
Te6edf3ViewCommandPluginTff7b72.Td2a8ffsourcesTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Te6edf3source

Tff7b72def Td2a8ffmessage_responseTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3destinationTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffget_sidebandTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsend_messageTb4b4b4(
Te6edf3messageTb4b4b4,
Te6edf3destinationTb4b4b4,
Tff7b72FalseTb4b4b4, T8b949e# Don't use propagation by default, try direct first
Te6edf3skip_fields Tff7b72= Tff7b72TrueTb4b4b4, T8b949e# Don't include any additional fields automatically
Te6edf3no_display Tff7b72= Tff7b72TrueTb4b4b4, T8b949e# Don't display this message in the message stream
Tb4b4b4)

Tff7b72def Td2a8ffimage_responseTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3image_fieldTb4b4b4, Te6edf3destinationTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffget_sidebandTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsend_messageTb4b4b4(
Te6edf3messageTb4b4b4,
Te6edf3destinationTb4b4b4,
Tff7b72FalseTb4b4b4, T8b949e# Don't use propagation by default, try direct first
Te6edf3skip_fields Tff7b72= Tff7b72TrueTb4b4b4, T8b949e# Don't include any additional fields automatically
Te6edf3no_display Tff7b72= Tff7b72TrueTb4b4b4, T8b949e# Don't display this message in the message stream
Te6edf3image Tff7b72= Te6edf3image_fieldTb4b4b4, T8b949e# Add the scaled and compressed image
Tb4b4b4)

Tff7b72def Td2a8fftimestamp_strTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3time_sTb4b4b4)Tb4b4b4:
Te6edf3timestamp Tff7b72= Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3time_sTb4b4b4)
Tff7b72return Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstamptimefmtTb4b4b4, Te6edf3timestampTb4b4b4)

Tff7b72def Td2a8ffhandle_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argumentsTb4b4b4, Te6edf3lxmTb4b4b4)Tb4b4b4:
Te6edf3requestor Tff7b72= Te6edf3lxmTff7b72.Td2a8ffsource_hash

Tff7b72if Tffa657lenTb4b4b4(Te6edf3argumentsTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_responseTb4b4b4(Ta5d6ff"Ta5d6ffNo view source was specifiedTa5d6ff"Tb4b4b4, Te6edf3requestorTb4b4b4)
Tff7b72return

Tff7b72if Te6edf3argumentsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff--listTa5d6ff" Tff7b72or Te6edf3argumentsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff-lTa5d6ff"Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsourcesTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffNo sources available on this systemTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffAvailable Sources:Tffea00\nTa5d6ff"
Tff7b72for Te6edf3source Tff7b72in Tff7b72selfTff7b72.Td2a8ffsourcesTb4b4b4:
Te6edf3response Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff - Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3sourceTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffmessage_responseTb4b4b4(Te6edf3responseTb4b4b4, Te6edf3requestorTb4b4b4)
Tff7b72return

Tff7b72tryTb4b4b4:
Te6edf3source Tff7b72= Te6edf3argumentsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3argumentsTb4b4b4) Tff7b72> T79c0ff1Tb4b4b4:
Te6edf3quality_preset Tff7b72= Te6edf3argumentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3quality_preset Tff7b72= Ta5d6ff"Ta5d6ffdefaultTa5d6ff"

Tff7b72if Tff7b72not Te6edf3source Tff7b72in Tff7b72selfTff7b72.Td2a8ffsourcesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_responseTb4b4b4(Ta5d6ff"Ta5d6ffThe specified view source does not exist on this systemTa5d6ff"Tb4b4b4, Te6edf3requestorTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3image_field Tff7b72= Tff7b72selfTff7b72.Td2a8ffsourcesTb4b4b4[Te6edf3sourceTb4b4b4]Tff7b72.Td2a8ffget_image_fieldTb4b4b4(Te6edf3quality_presetTb4b4b4)
Te6edf3image_timestamp Tff7b72= Tff7b72selfTff7b72.Td2a8fftimestamp_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsourcesTb4b4b4[Te6edf3sourceTb4b4b4]Tff7b72.Td2a8fflast_updateTb4b4b4)
Te6edf3message Tff7b72= Ta5d6ff"Ta5d6ff#!mdTffea00\nTa5d6ff" T8b949e# Tell sideband to format this message
Te6edf3message Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffSource [b]Tffd700{Te6edf3sourceTffd700}Ta5d6ff[/b] at [b]Tffd700{Te6edf3image_timestampTffd700}Ta5d6ff[/b]Ta5d6ff"

Tff7b72if Te6edf3image_field Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffimage_responseTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3image_fieldTb4b4b4, Te6edf3requestorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_responseTb4b4b4(Ta5d6ff"Ta5d6ffThe image source could not be retrieved or preparedTa5d6ff"Tb4b4b4, Te6edf3requestorTb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_responseTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn error occurred:Tffea00\nTffea00\nTffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3requestorTb4b4b4)

Te6edf3register_view_sourcesTb4b4b4(Tb4b4b4)

T8b949e# Finally, tell Sideband what class in this
T8b949e# file is the actual plugin class.
Te6edf3plugin_class Tff7b72= Te6edf3ViewCommandPlugin

Served by rngit 1.4.2 - Generated in 0.06s